package me.zhengjie.utils;

import org.apache.log4j.Level;
import org.apache.log4j.Logger;
import org.apache.log4j.PatternLayout;
import org.apache.log4j.RollingFileAppender;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.concurrent.ConcurrentHashMap;

@Component
public class Log4jUtil {
    private final static ConcurrentHashMap<String,Logger> loggerMap = new ConcurrentHashMap<String, Logger>();

    private static String file_path;

    @Value("${file.windows.log}")
    public void setFilePath(String filePath) {
        file_path = filePath;
    }

    public static Logger getLoggerByName(String name){
        SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date date = new Date();
        String format = simpleDateFormat.format(date);

        name = name + '.' + format;

        if(loggerMap.containsKey(name)){
            return loggerMap.get(name);
        }
        else{
            return createLoggerByName(name);
        }
    }

    public static Logger createLoggerByName(String name) {
        // 生成新的Logger
        // 如果已經有了一個Logger實例返回現有的
        Logger logger = Logger.getLogger(name);
        // 清空Appender。特別是不想使用現存實例時一定要初期化
        logger.removeAllAppenders();
        // 設定Logger級別。
        logger.setLevel(Level.DEBUG);
        // 設定是否繼承父Logger。
        // 默認為true。繼承root輸出。
        // 設定false後將不輸出root。
        logger.setAdditivity(true);
        // 生成新的Appender
        RollingFileAppender  appender = new RollingFileAppender();
        PatternLayout layout = new PatternLayout();
        // log的输出形式
        String conversionPattern = "[%d] %p %t %c - %m%n";
        layout.setConversionPattern(conversionPattern);
        appender.setLayout(layout);
        // log输出路径
        // 这里使用了环境变量[catalina.home]，只有在tomcat环境下才可以取到
        //String tomcatPath = java.lang.System.getProperty("catalina.home");

        appender.setFile(file_path + name  +".log");
        // log的文字码
        appender.setEncoding("UTF-8");
        // true:在已存在log文件后面追加 false:新log覆盖以前的log
        appender.setMaxBackupIndex(100);
        appender.setMaxFileSize("200MB");
        appender.setAppend(true);
        // 适用当前配置
        appender.activateOptions();
        // 将新的Appender加到Logger中
        logger.addAppender(appender);

        loggerMap.put(name,logger);
        return logger;
    }
}
